package me.pbox.site.util;
import com.codeforces.commons.text.StringUtil;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.log4j.Logger;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author Vitaliy Kudasov (kuviman@gmail.com)
*/
public class JsonUtil {
private static final Logger logger = Logger.getLogger(JsonUtil.class);
public static Map<String, Object> toMap(String json) {
JsonFactory factory = new JsonFactory();
ObjectMapper mapper = new ObjectMapper(factory);
TypeReference<HashMap<String,Object>> typeRef
= new TypeReference<HashMap<String,Object>>() {};
Map<String,Object> result;
try {
result = mapper.readValue(json, typeRef);
} catch (IOException e) {
logger.error("Can't process json `" + StringUtil.shrinkTo(json, 1000) +"`.", e);
throw new RuntimeException("Can't process json `" + StringUtil.shrinkTo(json, 1000) +"`.", e);
}
return result;
}
public static String fromMap(Map<String, Object> map) {
JsonFactory factory = new JsonFactory();
ObjectMapper mapper = new ObjectMapper(factory);
try {
return mapper.writeValueAsString(map);
} catch (JsonProcessingException e) {
String message = "Can't convert map to json `" + StringUtil.shrinkTo(map.toString(), 1000) + "`.";
logger.error(message, e);
throw new RuntimeException(message, e);
}
}
public static String fromList(List<?> list) {
final ByteArrayOutputStream out = new ByteArrayOutputStream();
final ObjectMapper mapper = new ObjectMapper();
try {
mapper.writeValue(out, list);
} catch (IOException e) {
//
}
final byte[] data = out.toByteArray();
return new String(data);
//
// JsonFactory factory = new JsonFactory();
// ObjectMapper mapper = new ObjectMapper(factory);
// try {
// return mapper.writeValueAsString(list);
// } catch (JsonProcessingException e) {
// String message = "Can't convert map to json `" + StringUtil.shrinkTo(list.toString(), 1000) + "`.";
// logger.error(message, e);
// throw new RuntimeException(message, e);
// }
}
}